﻿// constantes
var TAXA_ATUALIZACAO = 1;
var TECLA_PAUSE = 112;
var TEMPO_NOVO_BALAO = 100;
var TAXA_VELOCIDADE = 0.0001;
// variáveis globais
var _context;
var _tela;
var _baloes = new BalloonShooter.Utils.List();
var _fundoCarregado = false;
var _imagemFundo = new Image();
var _estourados = 0;
var _perdidos = 0;
var _timerNovoBalao = 0;
var _acrescimoVelocidade = 0;
var _tempoAtualizado = Date.now();
var _cores = [
    new BalloonShooter.Cor('rgb(252,139,139)', 'rgb(250, 50, 50)'),
    new BalloonShooter.Cor('rgb(240, 240, 185)', 'rgb(240, 230, 0)'),
    new BalloonShooter.Cor('rgb(100,255,100)', 'rgb(20,195,20)'),
    new BalloonShooter.Cor('rgb(240,180,100)', 'rgb(240,140,15)'),
    new BalloonShooter.Cor('rgb(90,130,230)', 'rgb(20,80,220)')
];
var _executando = true;
var _somEstouro = new BalloonShooter.Som('som/estouro', 3, false);
var _mostrarMenu = true;
var _mainMenu = null;

function init() {

	// eventos
	window.onmousedown = mouseDown;
	window.onkeypress = keyPress;

	_imagemFundo.onload = function () {
		_fundoCarregado = true;
	};

	_tela = document.getElementById('mainCanvas');
	_context = _tela.getContext('2d');
	_context.font = "bold 14px Verdana";
	_imagemFundo.src = "img/sky_bkg.png";

	// Inicia
	window.setInterval(atualiza, TAXA_ATUALIZACAO);
	_mainMenu = new Menu("Balões",
                ["Fácil", "Difícl", " ", "Iniciar"],
                70, 50, 400,
                function (numItem) {
                	if (numItem == 3) {
                		_executando = true;
                		_mostrarMenu = false;
                	}
                	else if (numItem == 0) {
                		TAXA_VELOCIDADE = 0.0001;
                	}
                	else if (numItem == 1) {
                		TAXA_VELOCIDADE = 0.1;
                	}
                },
                null);
}

function atualiza() {
	desenha();

	if (_mostrarMenu) {
		_mainMenu.Render();
	}
	else if (_executando) {
		moveBaloes();

		atualizaPlacar();

		adicionaBalao();
	}
}

function desenha() {
	if (_fundoCarregado)
		_context.drawImage(_imagemFundo, 0, 0);

	for (var i = 0; i < _baloes.items.length; i++) {
		_baloes.items[i].desenha();
	}
}

function mouseDown(e) {
	var posx = 0;
	var posy = 0;

	if (!e) var e = window.event;

	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	if (_mostrarMenu) {
		_mainMenu.Input(posx, posy);
	}
	else {
		for (var i = 0; i < _baloes.items.length; i++) {
			var balloon = _baloes.items[i];

			if (balloon.verificaColisao(posx, posy)) {
				_baloes.remove(balloon);
				_estourados++;

				try {
					_somEstouro.tocar();
				}
				catch (ex) {
				}
			}
		}
	}
}

function keyPress(e) {
	var keynum = (window.event) ? e.keyCode : e.which;

	switch (keynum) {
		case TECLA_PAUSE:
			pausaJogo();
	}
}

function adicionaBalao() {
	_timerNovoBalao++;

	if (_timerNovoBalao == TEMPO_NOVO_BALAO) {
		var x = 32 + (Math.random() * (_tela.width - 64));
		var cor = _cores[Math.floor(Math.random() * _cores.length)];
		var novoBalao = new BalloonShooter.Balloon(_context, x, 700, 30, cor);

		_baloes.add(novoBalao);
		_timerNovoBalao = 0;
		_acrescimoVelocidade += TAXA_VELOCIDADE;
	}
}

function moveBaloes() {
	var agora = Date.now();
	var diferenca = agora - _tempoAtualizado;
	var modificador = diferenca / 1000;
	_tempoAtualizado = agora;

	for (var i = 0; i < _baloes.items.length; i++) {
		var balloon = _baloes.items[i];
		balloon.posYCentro -= (modificador * balloon.velocidade) + _acrescimoVelocidade;

		if (balloon.posYCentro < -30) {
			_baloes.remove(balloon);
			_perdidos++;
		}
	}
}

function atualizaPlacar() {
	_context.font = "20px Verdana";
	_context.fillStyle = "#000";
	_context.fillText("Estourados: " + _estourados.toString(), 100, 30);
	_context.fillText("Perdidos: " + _perdidos.toString(), 300, 30);
}

function pausaJogo() {
	_executando = !_executando;

	if (_executando) {
		_tempoAtualizado = Date.now();
		_context.font = "bold 14px Verdana";
	}
	else {
		_context.fillStyle = "#000";
		_context.font = "bold 35px Verdana";
		_context.fillText("Pause", (_tela.width / 2) - 80, _tela.height / 2);
	}
}

